package version1;
/*
 * 版本1--封装【拓展】
 *Mysql工具类
 *1.数据库：地址、用户名、密码 私有属性--
 * 2.静态方法【本类直接调用】 getParam (String 路径)
 * 目的：使用方法调用外部文件 db_mysql.properties
 * db_mysql.properties 对应  Java Properties读取键值对形式信息
 * Properties类 提供方法 load() 读取配置文件信息【键值对-数据库基本信息】
 * * 3.通过封装概念--链接成功数据【通用一个类链接 Mysql 和Oracle】
 *
 * */

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class Mysql {
    //1.任何数据库具备：地址，用户名，密码--私有静态属性
    private static String url;
    private static String username;
    private static String password;
    //2.静态方法：getParam(String 路径)--链接数据库--读取信息
    //2.1配置文件：键值对出现，保存数据库对应的基本信息xxx.properties

    public static void getParam(String fileName) throws IOException {
    //2.2Properties 类--读取xxx.properties配置文件信息
    Properties p=new Properties();
    //2.3外置文件读取--借助IO流--搬运数据--InputStream
    //Mysql.class表示当前 Mysql类的Class对象
    //理解：图书馆--区域存Mysql相关书籍
    //getClassLoader()获取当前类的加载器【加载器负责读取配置文件信息】
    //理解：图书馆--区域存Mysql相关书籍--图书管理员
    //getResourceAsStream(文件)获取当前加载器中键值对信息
   //理解：图书馆--区域存Mysql相关书籍--图书管理员--拿明确的书籍
    InputStream fis=
    Mysql.class.getClassLoader().getResourceAsStream(fileName);
    p.load(fis);
    //2.4读取数据库基本信息【url、用户、密码】赋值给当前对象【url、用户、密码】
    //Properties类--提供方法 getProperty()读取db_mysql.properties中键
    url=p.getProperty("url");
    username=p.getProperty("username");
    password=p.getProperty("password");
        System.out.println("测试链接成功："+ url+username+password);
    }

    public static void main(String[] args) throws IOException, SQLException {
      //测试封装概念--链接成功数据库
      Mysql.getParam("db_mysql.properties");
      //参考Mysql封装，写oracle封装【作业2】
      //链接成功mysql---------book表----增加一条纪录搜索
      //1.创建链接--Connection 代表java链接成功数据库
      Connection con= DriverManager.getConnection(url,username,password);
      //2.执行sql---Statement 代表java执行数据 sql
        Statement st=con.createStatement();
      //3.【CRUD操作：增删改 executeUpdate()   查executeQuery】
      String sql="insert into book values(6,'余华','活着',79,'2010年',80,'否')";

      int rows=st.executeUpdate(sql);//执行增删改 返回值int类型
        System.out.println("成功添加了："+rows+"一条纪录");


        // 删除数据
        String deleteSql = "delete from book where id = 6";
        int deleteRows = st.executeUpdate(deleteSql);
        System.out.println("成功删除了：" + deleteRows + "条记录");
        // 修改数据
        String updateSql = "update book set author = '鲁迅', name = '呐喊' WHERE id = 5";
        int updateRows = st.executeUpdate(updateSql);
        System.out.println("成功修改了：" + updateRows + "条记录");
        // 查询数据
        String selectSql = "select * from book where id = 5";
        ResultSet rs = st.executeQuery(selectSql);
        while (rs.next()) {
            System.out.println("ID: " + rs.getInt("id")
                    + ", 作者: " + rs.getString("author")
                    + ", 书名: " + rs.getString("name"));
        }
        //4.关闭链接--Statement--Connection
        rs.close();
        st.close();
        con.close();
    }

}
